A virtual machine is code that hosts an operating system and potentially a set of one or more applications as well. The virtual machine executes in an environment provided by a host operating system on a host computing system (the “host”).
In operation, the virtual machine generates images and/or rendering instructions representing the user interface (such as a desktop or application user interface) to be rendered on the client, and causes the host to transmit the same to the client. The client receives the image and/or rendering instructions, and renders the user interface accordingly. The client also receives user input and transmits the same to the host. The virtual machine processes the input and changes the virtual machine state. If such change in state causes a change to the user interface, the changes are transmitted to the client for further rendering. This process repeats rather quickly, and the response time is sufficiently fast, that the user of the client might not be even able to distinguish whether the operating system and perhaps the associated applications are operated on the client or via virtual machine.
Alternatively, virtual machines may virtualize a computing system that does not include a user interface, in which case there is no such rendering of a user interface. For instance, virtual machines may represent computing nodes in a distributed application. In that case, a number of virtual machines may each represent computing nodes that each perform a certain role in the distributed application.
A host computing system (also referred to as a “host”) is typically capable of running a number of virtual machines. The host typically ensures isolation between the virtual machines. Each host has a hypervisor that uses underlying physical resources (such as network bandwidth, storage, memory, processing) to provide the appearance to the virtual machine as though the virtual machine has dedicated physical resources. This appearance is referred to as a virtual resource. Thus, each virtual machine may have virtual hard drives, virtual processors, virtual network bandwidth, virtual RAM and so forth.